package cn.jiaqiang.chatgpt.data.domain.weixin.service.message;

import cn.jiaqiang.chatgpt.data.domain.openai.repository.IUserAccountRepository;
import cn.jiaqiang.chatgpt.data.domain.openai.model.entity.UserAccountEntity;
import cn.jiaqiang.chatgpt.data.domain.weixin.model.entity.MessageTextEntity;
import cn.jiaqiang.chatgpt.data.domain.weixin.model.entity.UserBehaviorMessageEntity;
import cn.jiaqiang.chatgpt.data.domain.weixin.repository.IWeiXinRepository;
import cn.jiaqiang.chatgpt.data.domain.weixin.service.IBehaviorMessageService;
import cn.jiaqiang.chatgpt.data.types.sdk.weixin.XmlUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

import static cn.jiaqiang.chatgpt.data.types.common.RedisConstants.OPENAI_CODE_EXPIRED;

/**
 * User: jia-qiang
 * Date: 2024-04-09
 * Time: 17:08
 */
@Service
public class BehaviorMessage401Service implements IBehaviorMessageService {

    private static final Logger log = LoggerFactory.getLogger(BehaviorMessage401Service.class);
    @Value("${wx.config.originalid}")
    private String originalId;

    @Resource
    protected IUserAccountRepository userRepository;

    @Resource
    private IWeiXinRepository weiXinRepository;

    /**
     * 处理用户消息 - 401
     * 新用户 -> 先注册然后返回验证码和账号
     */
    @Override
    public String doBehaviorMessage(UserBehaviorMessageEntity userBehaviorMessageEntity) {
        log.info("新用户, 进行开户操作....");
        String userId = userRepository.insertUserAccount(UserAccountEntity.builder()
                .openid(userBehaviorMessageEntity.getOpenId()).build());
        MessageTextEntity res = new MessageTextEntity();
        res.setToUserName(userBehaviorMessageEntity.getOpenId());
        res.setFromUserName(originalId);
        res.setCreateTime(String.valueOf(System.currentTimeMillis() / 1000L));
        res.setMsgType("text");
        if (userId.isEmpty()) {
            // 开户失败
            res.setContent("网络不佳, 请重新输入【401】获取校验码");
            return XmlUtil.beanToXml(res);
        }
        // 生成验证码
        String code = weiXinRepository.generateCode(userId, userBehaviorMessageEntity.getOpenId());
        // 反馈信息[文本]
        res.setContent(String.format("账号唯一ID: %s  验证码: %s  有效期为%s分钟, 请尽快登录.请勿转发!",
                userId, code, OPENAI_CODE_EXPIRED));
        return XmlUtil.beanToXml(res);
    }


}
